C语言之指针学习笔记
2017-08-25 08:52
337 查看
指针也是一种变量,占有内存空间,用来保存内存地址。
在指针声明时,*号代表所声明的变量为指针。
在指针使用时,*号表示操作指针所指向的内存空间的值。
*p相当于通过地址(p变量的值)找到一块内存,然后操作内存。
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
指针变量和它所指向的内存块是两个不同的概念。
指针是一种数据类型,是指它指向的内存空间的数据类型。
去除字符串前后空格的两种代码实现方法:
二级指针做输入的第一种数据模型:
二级指针做输入的第二种内存模型:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void printArray(char myArray[10][30], int num)
{
int i = 0;
for(i = 0; i < num; i++)
{
//printf("%s\n", myArray[i]);
printf("%s\n", *(myArray+i));
}
}
void sortMyArray(char myArray[10][30], int num)
{
int i = 0, j = 0;
char tmpBuf[30];
for(i = 0; i < num; i++)
{
for(j = i+1; j < num; j++)
{
if(strcmp(myArray[i], myArray[j])>0)
{
strcpy(tmpBuf, myArray[i]);
strcpy(myArray[i], myArray[j]);
stpcpy(myArray[j], tmpBuf);
}
}
}
}
void main()
{
int num = 4;
char myBuf[30];
char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbbb", "111111111111111"};
{
int len1 = sizeof(myArray);
int len2 = sizeof(myArray[0]);
int size = len1/len2;
printf("len1:%d, len2:%d, size:%d\n", len1, len2, size);
}
printf("排序之前:\n");
printArray(myArray, num);
sortMyArray(myArray, num);
printf("排序之后:\n");
printArray(myArray, num);
printf("hello...\n");
return;
}二级指针做输入的第三种内存模型:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **getMem(int num)
{
int i = 0;
char **p2 = NULL;
p2 = (char **)malloc(sizeof(char *) * num);
if(p2 == NULL)
{
return NULL;
}
for(i=0; i<num; i++)
{
p2[i] = (char *)malloc(sizeof(char)*100);
sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
}
return p2;
}
void printArray(char **myArray, int num)
{
int i = 0;
for(i=0; i<num; i++)
{
printf("%s\n", myArray[i]);
printf("%s\n", *(myArray+i));
}
}
void main()
{
int i = 0, j = 0;
char **p2 = NULL;
char *tmp = NULL;
char tmpbuf[100];
int num = 5;
p2 = getMem(num);
for(i=0; i<num; i++)
{
p2[i] = (char *)malloc(sizeof(char)*100);
sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
}
printf("排序之前:\n");
for(i=0; i<num; i++)
{
printf("%s\n", p2[i]);
}
/*
for(i=0; i<num; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(p2[i], p2[j])<0)
{
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
*/
for(i=0; i<num; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(p2[i], p2[j])>0)
{
strcpy(tmpbuf, p2[i]);
strcpy(p2[i], p2[j]);
strcpy(p2[j], tmpbuf);
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
printf("排序之后:\n");
for(i=0; i<num; i++)
{
printf("%s\n", p2[i]);
}
for(i=0; i<num; i++)
{
if(p2[i] != NULL)
{
free(p2[i]);
p2[i] = NULL;
}
}
if(p2 != NULL)
{
free(p2);
p2 = NULL;
}
printf("hello...\n");
return;
}
在指针声明时,*号代表所声明的变量为指针。
在指针使用时,*号表示操作指针所指向的内存空间的值。
*p相当于通过地址(p变量的值)找到一块内存,然后操作内存。
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
指针变量和它所指向的内存块是两个不同的概念。
指针是一种数据类型,是指它指向的内存空间的数据类型。
去除字符串前后空格的两种代码实现方法:
int trimSpace(char *str, char *newstr) { char *p = str; int ncount = 0; if(str == NULL || newstr == NULL) { printf("func trimSpace()\n"); return -1; } int i, j; i = 0; j = strlen(p) - 1; while(isspace(p[i]) && p[i] != '\0') { i++; } while(isspace(p[j]) && p[j] != '\0') { j--; } ncount = j - i + 1; strncpy(newstr, str + i, ncount); newstr[ncount] = '\0'; //*pCount = ncount; return 0; } int trimSpace02(char *str) { char *p = str; int ncount = 0; if(str == NULL) { printf("func trimSpace()\n"); return -1; } int i, j; i = 0; j = strlen(p) - 1; while(isspace(p[i]) && p[i] != '\0') { i++; } while(isspace(p[j]) && p[j] != '\0') { j--; } ncount = j - i + 1; strncpy(str, str + i, ncount); str[ncount] = '\0'; //*pCount = ncount; return 0; }
二级指针做输入的第一种数据模型:
#include <stdio.h> #include <stdlib.h> #include <string.h> void printMyArray01(char **myArray, int num) { int i = 0; if(myArray == NULL) { return; } for(i = 0; i < num; i++) { //printf("%s\n", myArray[i]); printf("%s\n", *(myArray + i)); } } void sortMyArray01(char **myArray, int num) { int i = 0, j = 0; char *tmp = NULL; for(i = 0; i < num; i++) { for(j = i; j < num; j++) { if(strcmp(myArray[i], myArray[j]) > 0) { tmp = myArray[i]; myArray[i] = myArray[j]; myArray[j] = tmp; } } } } void main() { int num = 0; char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", "11111"}; num = sizeof(myArray)/sizeof(myArray[0]); printf("排序之前:\n"); printMyArray01(myArray, num); sortMyArray01(myArray, num); printf("排序之后:\n"); printMyArray01(myArray, num); printf("hello...\n"); return; }
二级指针做输入的第二种内存模型:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void printArray(char myArray[10][30], int num)
{
int i = 0;
for(i = 0; i < num; i++)
{
//printf("%s\n", myArray[i]);
printf("%s\n", *(myArray+i));
}
}
void sortMyArray(char myArray[10][30], int num)
{
int i = 0, j = 0;
char tmpBuf[30];
for(i = 0; i < num; i++)
{
for(j = i+1; j < num; j++)
{
if(strcmp(myArray[i], myArray[j])>0)
{
strcpy(tmpBuf, myArray[i]);
strcpy(myArray[i], myArray[j]);
stpcpy(myArray[j], tmpBuf);
}
}
}
}
void main()
{
int num = 4;
char myBuf[30];
char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbbb", "111111111111111"};
{
int len1 = sizeof(myArray);
int len2 = sizeof(myArray[0]);
int size = len1/len2;
printf("len1:%d, len2:%d, size:%d\n", len1, len2, size);
}
printf("排序之前:\n");
printArray(myArray, num);
sortMyArray(myArray, num);
printf("排序之后:\n");
printArray(myArray, num);
printf("hello...\n");
return;
}二级指针做输入的第三种内存模型:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **getMem(int num)
{
int i = 0;
char **p2 = NULL;
p2 = (char **)malloc(sizeof(char *) * num);
if(p2 == NULL)
{
return NULL;
}
for(i=0; i<num; i++)
{
p2[i] = (char *)malloc(sizeof(char)*100);
sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
}
return p2;
}
void printArray(char **myArray, int num)
{
int i = 0;
for(i=0; i<num; i++)
{
printf("%s\n", myArray[i]);
printf("%s\n", *(myArray+i));
}
}
void main()
{
int i = 0, j = 0;
char **p2 = NULL;
char *tmp = NULL;
char tmpbuf[100];
int num = 5;
p2 = getMem(num);
for(i=0; i<num; i++)
{
p2[i] = (char *)malloc(sizeof(char)*100);
sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
}
printf("排序之前:\n");
for(i=0; i<num; i++)
{
printf("%s\n", p2[i]);
}
/*
for(i=0; i<num; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(p2[i], p2[j])<0)
{
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
*/
for(i=0; i<num; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(p2[i], p2[j])>0)
{
strcpy(tmpbuf, p2[i]);
strcpy(p2[i], p2[j]);
strcpy(p2[j], tmpbuf);
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
printf("排序之后:\n");
for(i=0; i<num; i++)
{
printf("%s\n", p2[i]);
}
for(i=0; i<num; i++)
{
if(p2[i] != NULL)
{
free(p2[i]);
p2[i] = NULL;
}
}
if(p2 != NULL)
{
free(p2);
p2 = NULL;
}
printf("hello...\n");
return;
}
相关文章推荐
- iOS开发学习笔记 2-4 C语言部分 指针
- C语言学习笔记(五)指针
- 【C语言学习笔记】指针的“加减”运算
- c语言学习笔记27之指针3
- 【学习笔记】【C语言】指针
- 学习笔记43-C语言指针
- C语言-指针的基础学习笔记(2)
- C语言学习笔记(17指针)
- 黑马程序员——ios学习笔记 C语言 指针的应用
- C语言学习笔记-8.指针
- C语言学习笔记(18多级指针)
- 数组和指针————C语言学习笔记1
- c语言学习笔记28之指针4
- C语言学习笔记17——数组与指针
- C语言学习笔记(18) 指针数组和数组指针分析
- C语言指针学习笔记
- 【学习笔记】【C语言】返回指针的函数
- C语言学习笔记--------伊能C语言学习笔记----使用指针来解决函数的副本机制
- iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*
- C语言学习笔记之指针篇(二)