首页 > 代码库 > 指针和数组
指针和数组
指针的几个要点:
一
指针的定义,赋值 要区分:
int a;
int *p = &a;
这是定义的时候初始化,即赋值
=======================
int a;
int *p;
p = &a;
定义,初始化分开, 就这里我迷惑了好久
==========================
多个(修饰符)修饰变量,看变量名先和谁结合(先看后缀)(ps:符号和变量之间的空格不要计算,和距离无关 int*和int *.......
int * p [5] 先和[ ]结合,所以p是一个数组,它的每个元素都是一个指针,
int(*p)[5] 是一个指针,这个指针指向一个有5个int元素的数组,p是数组首元素的地址
int a[3][5]={{1 2 3 4 5}{ 6 7 8 9 10}{ 11 12 13 14 15}} (简写的)
&a a a[0]
这4个都是指针,他们的地址都相同,但是他们指向的对象的空间大小不同
&a 相当于 int *p = &a 指向整个数组 60字节
a 相当于 int (*p)[5] 指向a的首元素 即 {1 2 3 4 5 } 20字节
a[0] 相当于 int (*p) 指向a[0]的首元素 即 {1}
==================================================================
ubuntu 14.04 vim
随意输入100个以内字符,计算各种字符有几个!(有一个语句我很自豪) @. @
#include<iostream> using namespace std; void fun(char *tt,int pp[]) { while(*(tt) != ‘\0‘) { if(*(tt)>=‘a‘ && *(tt)<=‘z‘) ++pp[((int)*(tt))-97]; tt++; } } int main() { int pp[26]={0}; char tt[100]; int i=0; while(cin>>tt[i++]) ; fun(tt,pp); for(int j = 0;j != 26;++j) cout << (char)(j+97) <<":"<<pp[j]<< endl; return 0; }
======================================================================================
边输入数据边分配空间的动态数组(使用3个指针相互赋值)
#include<iostream> using namespace std; int main() { int size=2,k=1; int *a=new int [0]; int *q; int *p; p=a; int i=0; while(cin>>*(a+i++)) { if(i == k*size && k%2 != 0) { q = new int[++k*size]; for(int j = 0;j != (k-1)*size;++j) *(q+j) = *(p+j); delete[] p; a = q; } else if(i == k*size && k%2 == 0) { p = new int[++k*size]; for(int j = 0;j != (k-1)*size;++j) *(p+j) = *(q+j); delete[] q; a = p; } } cout<<"@.@___@.@"<<endl; for(int j = 0;j != i-1;++j) cout<<*(a+j)<<endl; return 0; }
现在发现写上翻译是多么重要,,,,