指针的几个要点:
一
指针的定义,赋值 要区分:
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
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 <
return 0;
}
======================================================================================
边输入数据边分配空间的动态数组(使用3个指针相互赋值)
#include
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<
for(int j = 0;j != i-1;++j)
cout<
return 0;
}
现在发现写上翻译是多么重要,,,,