如果我错了,有人可以检查我的理解并纠正我吗?
int p = 5; //create an int holding 5
int *ptr; //create a pointer that can point to an int
*ptr = &p; // not sure - does this mean that my pointer now points to memory address five, or that the memory address my pointer points at contains 5?
Run Code Online (Sandbox Code Playgroud)
对不起基本的问题 - 我很快就有一个需要使用指针的assignmnet,我真的想在它设置之前破解基础知识.
我在页面上设置了几个HTML块,如:
<p class="something">
<a href="http://example.com/9999">text 1 2 3</a>
<a href="http://example.com/2346saasdf">text 3 4 5</a>
(9999)
<a href="http://example.com/sad3ws">text 5 6 7random</a>
</p>
Run Code Online (Sandbox Code Playgroud)
我想用它们得到括号中的数字.我不得不承认我以前从未真正使用过正则表达式 - 阅读它,看过它的例子但是我自己没有使用它.无论如何,我创造了这个有点环顾四周:
<p class="something">(.*?)</p>
这正确地得到整个<p>块,但是,我只想要(9999)(括号完整).我真的不确定如何得到它.
假设页面上的其他元素也可能在括号中有数字(但它们不会包含在这种格式中),并且HTML将保持有效且一致,我该如何获取它?
我知道这对于之前使用过正则表达式的人来说可能很容易,但对于解决方案,我会欣赏每个角色捕获的细节,以便我可以从中学习.
我关注了以下网页:
http://www.1024cores.net/home/lock-free-algorithms/reader-writer-problem/improved-lock-free-seqlock
来源如下:
struct data_t
{
int seq; // sequence number
int data [1024]; // user data
};
struct seqlock_t
{
data_t* current;
data_t pool [16]; // 16 user objects are held
};
seqlock_t sl;
Run Code Online (Sandbox Code Playgroud)
结构很简单,让我困惑的是:
data_t* d0 = sl.current; // load-consume
int idx = (sl.current - sl.pool + 1) % 16;
data_t* d = &sl.pool[idx];
Run Code Online (Sandbox Code Playgroud)
该sl.current是一个指针,sl.pool是什么?当前的池可以实现什么?在c language视图中,我该如何解释这个陈述?
int idx = (sl.current - sl.pool + 1) % 16;
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢所有信息,它帮了很多!!! 在我自己的编码风格中将使用int idx =(sl.current - …
似乎在其他地方找不到我的问题的答案。
考虑代码:
int *ptr = malloc (sizeof (*ptr));
int *dummyPtr = ptr;
free (dummyPtr);
printf ("ptr: %p, dummy: %p\n", ptr, dummyPtr);
Run Code Online (Sandbox Code Playgroud)
据我了解,free()接受一个指针并使其指向NULLaka (nil)。即,指针被取消引用并且指向任何地方。这意味着指针指向的内存被有效擦除。
这个问题分为两个部分:
dummyPtr似乎仍然指向内存中的地址而不是(nil). 为什么?ptr?它仍然指向该内存块还是也被取消引用?我已经多次运行此代码和某些变体,但结果相互矛盾。有时只有副本受到影响,有时两者都受到影响。有时指向的值甚至设置为零!
坦白说,我不知道发生了什么事。(我正在运行 Debian,如果这有什么区别的话。)
#include <iostream>
using namespace std;
int main() {
int *p1;
p1 = new int;
int *p2;
p2 = new int;
p2 = p1; // what happens here?
*p1=5;
cout << "pointer 2 is " << *p2 << endl << *p1 << endl; // both give out 5
delete p1; // what happens to p2 ?
cout << "pointer 2 is " << *p2 << endl;
delete p2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我删除指针对象 p1 时会发生什么?什么是指针 p2 现在引用?有人能解释一下吗?谢谢您的帮助
我知道指针的基础知识.
我想知道你什么时候使用
Foo *foo;
Run Code Online (Sandbox Code Playgroud)
代替
Foo foo;
Run Code Online (Sandbox Code Playgroud)
而另一个人则不允许你这样做.
提前致谢
这是我的问题:
编写一个反转字符串的函数void reverse(char s []).例如,"Harry"变成"yrraH".
这是我的代码:
void reverse(char s[]);
int main()
{
char s [] = "Harry";
reverse(s);
cout << s << endl;
system("PAUSE");
return 0;
}
void reverse(char s[])
{
int length = strlen(s);
int c, i ,j;
for(int i=0, j=length-1 ; i<j ; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
Run Code Online (Sandbox Code Playgroud)
它可以完美地扭转字符串.但是,我被要求用指针做.所以根据我的想法,首先我指定ap指针来获取字符串中的第一个char.然后我分配一个指针来获取字符串的最后一个字符串.I循环通过反转阵列.但是当我试图这样做以获得最后一个字符时:
char *q = strlen(s-1);
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误.有人可以帮我用指针解决这个问题吗?
更新部分
if (strlen(s) > 0(
{
char* first = &s[0];
char*last = &s[strlen(s)-1];
while(first < …Run Code Online (Sandbox Code Playgroud) 所以我得到了我的代码以成功将英语转换为猪拉丁语,但是当我将变量传递回main {}时,我只能以某种方式返回地址位置或某个十六进制或字符编号.我试图使用不同的转换说明符和所有内容,但由于某种原因,我无法让它输出字符串.该程序从输入txt文件读取,计算转换,然后打印到输出txt文件.让我知道你认为是什么问题.谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STR_SIZE 50
char * convertToPigLatin (char * strPtr, char * pLatinStr);
int main(int argc, char *argv[])
{
char str[MAX_STR_SIZE];
char pStr[MAX_STR_SIZE];
char *pStrPtr;
FILE *fileInPtr; //Create file name
FILE *fileOutPtr;
fileInPtr = fopen("pigLatinIn.txt", "r"); //Assign text to file
fileOutPtr = fopen("pigLatinOut.txt", "w");
if(fileInPtr == NULL) //Check if file exists
{
printf("Failed");
exit(-1);
}
fprintf(fileOutPtr, "English Word\t\t\t\tPig Latin Word\n", pStr);
fprintf(fileOutPtr, "---------------\t\t\t\t----------------\n", pStr);
do //Cycles until end of text
{
fscanf(fileInPtr, "%29s", …Run Code Online (Sandbox Code Playgroud) 假设我们有一个像这样的字符指针:
static char *example[]={"doctor","who","hello"};
Run Code Online (Sandbox Code Playgroud)
我对这个例子中发生的事情感到有些困惑.
指针example只是有自己的地址吗?
我在数组中的字符串每个都有一个不同的内存地址*example
吗?
指针是否example只是简单地引用每个地址,并初始化每个地址中的内容,如字符串声明所示?
我只是在使用C几个月,所以我只是想抓住事情的具体细节,我听说指针是C单手最重要的方面.
我对以下函数的理解是它要求整数变量的地址.
void MyFunction(int & myParameter)
Run Code Online (Sandbox Code Playgroud)
但在我的代码中,我有:
int myVar;
myFunction(&myVar)
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误说:没有已知的从'int*'到'const int&'的转换.
当我没有'&'传递'myVar'时,编译器很高兴.我有点困惑,这里发生了什么.在此上下文中,指针符号'*'和地址符号'&'之间有什么区别?我什么时候应该使用?使用'&'时c和c ++之间是否有区别?提前致谢.